package cn.ryh.po;

import cn.ryh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Resource（JSR-250标准注解，推荐使用它来代替Spring专有的@Autowired注解）Spring 不但支持自己定义的@Autowired注解，
 * 还支持几个由JSR-250规范定义的注解，它们分别是@Resource、@PostConstruct以及@PreDestroy。
   @Resource的作用相当于@Autowired，只不过@Autowired按byType自动注入，而@Resource默认按byName自动注入罢了。
   @Resource有两个属性是比较重要的，分别是name和type，Spring将@Resource注解的name属性解析为bean的名字，
   而type属性则解析为bean的类型。所以如果使用name属性，则使用byName的自动注入策略，而使用type属性时则使用byType自动注入策略。
   如果既不指定name也不指定type属性，这时将通过反射机制使用byName自动注入策略
   @Resource装配顺序
     1 如果同时指定了name和type，则从Spring上下文中找到唯一匹配的bean进行装配，找不到则抛出异常
     2 如果指定了name，则从上下文中查找名称（id）匹配的bean进行装配，找不到则抛出异常
     3 如果指定了type，则从上下文中找到类型匹配的唯一bean进行装配，找不到或者找到多个，都会抛出异常
     4 如果既没有指定name，又没有指定type，则自动按照byName方式进行装配（见2）；如果没有匹配，
   则回退为一个原始类型（UserDao）进行匹配，如果匹配则自动装配；

 */
@Component(value = "user")
public class User {
    @Resource
    private UserService userService;
    public void add(){
        userService.say();
        System.out.println("add+++++++++");
    }

    public void add(String string){

    }

    public String add(String string,int i){
        return null;

    }
}
